import { Transaction } from 'dexie'

// v5版本升级脚本
export async function upgradeToV5(tx: Transaction): Promise<void> {
  // 获取所有topics和files数据
  const topics = await tx.table('topics').toArray()
  const files = await tx.table('files').toArray()

  // 处理files表：转换Date类型为ISO字符串
  for (const file of files) {
    if (file.created_at instanceof Date) {
      file.created_at = file.created_at.toISOString()
      await tx.table('files').put(file) // 更新记录
    }
  }

  // 处理topics表：重构搜索数据结构
  for (const topic of topics) {
    let hasChanges = false

    // 遍历所有消息
    for (const message of topic.messages) {
      if (message?.metadata?.tavily) {
        hasChanges = true
        const tavily = message.metadata.tavily
        delete message.metadata.tavily // 移除旧字段

        // 转换为新的webSearch结构
        message.metadata.webSearch = {
          query: tavily.query,
          results:
            tavily.results?.map((i) => ({
              title: i.title,
              url: i.url,
              content: i.content
            })) || []
        }
      }
    }

    // 如果有变更则更新记录
    if (hasChanges) {
      await tx.table('topics').put(topic)
    }
  }
}

// v6版本升级脚本（添加时间戳字段）
export async function upgradeToV6(tx: Transaction): Promise<void> {
  const topics = await tx.table('topics').toArray()
  const now = new Date().toISOString() // 当前时间戳

  // 为没有时间戳的topic添加默认值
  for (const topic of topics) {
    if (!topic.createdAt && !topic.updatedAt) {
      await tx.table('topics').update(topic.id, {
        createdAt: now,
        updatedAt: now
      })
    }
  }
}
